/** * */ package de.hannesniederhausen.storynotes.ui.internal.navigation.widgets; import org.apache.lucene.document.Document; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.ui.workbench.modeling.ESelectionService; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Shell; import de.hannesniederhausen.storynotes.model.service.IModelProviderService; /** * @author Hannes Niederhausen * */ public class SearchDialog extends Dialog implements FocusListener, IDoubleClickListener, KeyListener { private TableViewer viewer; private Shell shell; private IEclipseContext context; public SearchDialog(Shell parent, int style, IEclipseContext context) { super(parent, style); this.context = context; init(parent); } private void init(Shell parent) { shell = new Shell(parent, SWT.NO_TRIM | SWT.ON_TOP); shell.setSize(300, 300); shell.setLayout(new GridLayout()); viewer = new TableViewer(shell); viewer.setLabelProvider(new DocumentLabelProvider()); viewer.setContentProvider(ArrayContentProvider.getInstance()); viewer.addDoubleClickListener(this); viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); viewer.getControl().addFocusListener(this); viewer.getControl().addKeyListener(this); } public Shell getShell() { return shell; } public void setInput(Object input) { viewer.setInput(input); } public void open() { getShell().setVisible(true); } public void setFocus() { viewer.getControl().setFocus(); } @Override public void focusGained(FocusEvent arg0) { } @Override public void focusLost(FocusEvent arg0) { // getShell().close(); } @Override public void doubleClick(DoubleClickEvent event) { processSelection(); } private void processSelection() { IStructuredSelection sel = (IStructuredSelection) viewer.getSelection(); if (sel.isEmpty()) return; Object o = sel.getFirstElement(); Document d = (Document) o; IModelProviderService mps = context.get(IModelProviderService.class); context.get(ESelectionService.class).setSelection(mps.getElementById(Long.parseLong(d.get("id")))); if (!getShell().isDisposed()) { getShell().close(); } } @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.CR) { processSelection(); } } @Override public void keyReleased(KeyEvent e) { } private class DocumentLabelProvider implements ILabelProvider { @Override public void addListener(ILabelProviderListener listener) { } @Override public void dispose() { } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void removeListener(ILabelProviderListener listener) { } @Override public Image getImage(Object element) { return null; } @Override public String getText(Object element) { return ((Document) element).get("field_label"); } } }